{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Populating the interactive namespace from numpy and matplotlib\n"
     ]
    }
   ],
   "source": [
    "%pylab inline\n",
    "matplotlib.rcParams[\"image.cmap\"] = \"afmhot\"\n",
    "matplotlib.rcParams[\"image.interpolation\"] = \"none\"\n",
    "figsize(10,5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "import clstm\n",
    "import h5py"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# LSTM + CTC Training on UW3 "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's start by downloading the dataset."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current\n",
      "                                 Dload  Upload   Total   Spent    Left  Speed\n",
      "100  393M  100  393M    0     0  72.0M      0  0:00:05  0:00:05 --:--:-- 81.2M\n"
     ]
    }
   ],
   "source": [
    "!test -f uw3-dew.h5 || (curl http://www.tmbdev.net/ocrdata-hdf5/uw3-dew.h5.gz > uw3-dew.h5.gz && gunzip uw3-dew.h5.gz)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In HDF5 data files for CLSTM, row `t` represents the input vector at time step `t`. For MNIST, we scan through the original image left-to-right over time.\n",
    "\n",
    "Transcripts are stored in a separate ragged array of integers; each integer represents a class that can be mapped to a Unicode codepoint using the `codec` array. Class 0 is special and used for skips in the CTC.\n",
    "\n",
    "Image storage in HDF5 would have to be a rank 3 doubly ragged array, but HDF5 supports only rank 2 arrays. We therefore store image dimensions in a separate array."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[55 73 72 65 84 66 73 72 65  1 38 79 73]\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f20c1a4a950>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "index = 5\n",
    "h5 = h5py.File(\"uw3-dew.h5\",\"r\")\n",
    "imshow(h5[\"images\"][index].reshape(*h5[\"images_dims\"][index]).T)\n",
    "print h5[\"transcripts\"][index]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "All input vectors need to have the same length, so we just take that off the first vector in the dataset. The number of outputs can be taken from the codec."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "48 88\n"
     ]
    }
   ],
   "source": [
    "ninput = int(h5[\"images_dims\"][0][1])\n",
    "noutput = len(h5[\"codec\"])\n",
    "print ninput,noutput"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's create a small bidirectional LSTM network."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      ".stacked: 0.000100 0.900000 48 88\n",
      ".stacked.parallel: 0.000100 0.900000 48 100\n",
      ".stacked.parallel.lstm: 0.000100 0.900000 48 50\n",
      ".stacked.parallel.reversed: 0.000100 0.900000 48 50\n",
      ".stacked.parallel.reversed.lstm: 0.000100 0.900000 48 50\n",
      ".stacked.softmax: 0.000100 0.900000 100 88\n",
      "\n"
     ]
    }
   ],
   "source": [
    "net = clstm.make_net_init(\"bidi\",\"ninput=%d:nhidden=50:noutput=%d\"%(ninput,noutput))\n",
    "net.setLearningRate(1e-4,0.9)\n",
    "print clstm.network_info(net)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x7f20ed25a5d0>"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkoAAACGCAYAAAAilqV/AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAHZlJREFUeJzt3Xe4FNX9x/G3RhANYCyIMYigCCjYsFwUlBIbQYNgrwFL\nohDFFoxG0VhjjeWhhcSgPxuxoSYoRKUEFEQFjT1CYiUqQSKoERV/f+z97Mzu3bk723cvn9fz8LDM\n7syc2ZlZznzP95wDZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZtZErQuMB54GZgDbVrY4\nZmZmZtVjCHBb/es6YEoFy2JmZmZWVW4Ajgz9+71KFcTMzMysVNbLc73WwKehf39DojluTWjZUmCL\nPLdvZmZmVk6zgL7pC9fNc2OfAq3StrMm7TOuJJmZmVktWAL0yfRGvhWlucCP6l/3BF7KcztmZmZm\nlbYk6o18m94eAvYnUWECGJbndszMzMyqVr4VpW+B04tZEDMzM7Nqk2/Tm5mZmVmT54qSmZmZWQRX\nlMzMzMwiuKJkZmZmFsEVJTMzM7MIriiZmZmZRXBFyczMzCyCK0pmZmZmEVxRMjMzM4vgipKZmZlZ\nhHynMDEzq2nt27cHoFu3bnlvY/78+QAsX768KGWy6tWiRQsA+vXrl/WzS5cuBWDRokUlLZOVhyNK\nZmZmZhFcUTIzMzOL4Ka3tVDPnj0BaNeuXVn2t2zZMgBmzpxZlv2ZxTFw4EAAxowZk/c2Lr30UgBe\neeWV5LLp06cDsHLlyvwLZ1WjefPmAAwbNgyId70888wzAIwcORKA5557rkSls3KIG1GqA2bUv+4E\nzAFmA2OBdUpQLjMzM7OKi1PJGQUcD6wC9gYeAa4nUVEaB0wDpmRY79silbHounTpAgSRlXTffpso\n+ty5cwFYvHhxeQpWYr169QLgt7/9LQC77757Wfa7YMECAOrq6sqyP7M4+vfvD8A111wDFHY/6DcD\noHv37gC8+uqrBZTOqkWbNm0A+PDDDwFYZ53s/23qepg0aRIAJ510UmkKZ8X0BLAfGepFcSJKbwFD\nQiv3IFFJAnisfsNmZmZmTU6cHKUHgQ6hf4drW6uAjYpZoFJRFAmCvIKjjjqq0XWGDh0KNJ2IUseO\nHQHYZJNNgHhPRpa78LWmrsTqJjxv3ryKlMkamjEjkU1wwQUXAHDVVVcBsMcee1SsTFZcgwYNAuD7\n3/8+AJMnTwbgk08+yXlbufxe6rNdu3YFoHfv3gDMmTMn5/1a5eXT621N6HUrYEWRymJmZmZWCdtE\nvZFPr7eFQB9gFjAAeDLPQpVUhw4dADj88MOB1KfEI488stF11b7c1CIud911V8q/d9ppJwCOPvro\n5LKtttqq4P3897//BWDChAkAvPvuuwVvsxZ07twZgMsuuyy57IgjjgDg2muvBRxRqia6z598MvET\nNnXqVMARpaZg8ODBAFx33XUAbLPNNil/X3HFFQB8+umnJS1Hy5YtAdhss81Kuh8riiVEVJZyqSgp\nW/FcYCLQHHgVuL+gopmZmZlVqbgVpX+R6PEG8A+gbykKkw/V1EeMGJGyXE/3xxxzDND0okP50BP0\nnXfeCQTfSbh3zuWXXw7kN8bSqlWrALjkkksAuOWWW1L221R16tQJCL67bBFLqy66PjXO1/777598\nb++99860ilUhtR5AkG+27bbbpnxmww03BMr3/8Hzzz8PwJQpmTqGW63wyNxmZmZmEWpqZO7vfve7\nAIwePTq5TBElj1OROz1J33777cllw4cPB/KLKH3++ecA3HzzzUUoXe1Q9NKRpNo2a9YsIBg/DRxR\nqgWKDikfEGC77bZL+Yx+68aOHQsEeZRxfPbZZwBcffXVQNBLMo6mHk1fWziiZGZmZhbBFSUzMzOz\nCDXV9KZEvFGjRlW4JGZBEvfpp59e4ZJYMeXTXKJu6ABLly4tZnEsi+OOOw6A3XbbrSTbV0qBmt7W\nrEkMJfirX/2qwWdffvllIGjie/3110tSJisvR5TMzMzMItRUREmDg/3iF79ILgs/yZmVgwYzvfXW\nWwE46KCDKlgaqwbbb7998vUGG2wA5DdNhsV3/PHHA8FwJOlDARTbypUrAbj++usBeOuttxp8RoPr\nahDTSlGC+x/+8Aeg8M5OmjBanX2yueOOO5KvNeyGnHXWWUAw4HEcp512GgCrV6+OvU4xOaJkZmZm\nFqGmIkpffvklAOPGjUsue/vttzN+Vu3V559/fukLZgXr06cP0DDf57777gPggQceyLoNnetdd901\n8jM///nPAVi2bFnssrVp0wYIIkibbropAPvtt1/sbWhyzgULFgDxjqeYWrduDcDvfvc7AN57773k\ne+edd15Zy6Kn3SuvvBKAMWPGAPD++++XZH+77LILAL/85S9jlWvnnXfOeR8HH3xw8vX3vvc9AD74\n4IOU7WoYjubNm0duR9elrtM4ou6ddIouAPz1r3+Nvf1sdHz33HNP7HU0yG14up+4lJOkyc3jRJJU\nRkWDTjzxRCC33wHRtCQDBgxILnvllVcAmDRpUs7bi0uRM0iNYGaSPmTCeusF/9Xr2LPRfQPB4MF7\n7bVXo+sovy8cLVLkTWXaZ599gGCi4jjb0+9XeFDRcnJEyczMzCxCTUWURAOAQRBxENVa9RlHlGpD\nx44dATjqqKNSlis6NGzYsKzb0GSmm2++ecrycC8mDVD6v//9D4DDDjsMCKKVstFGGyVf33vvvQD0\n798/axmidO3aFQimVtDxKJrSpUuX5GdziVSl0/GoLf/RRx8FYP3110/ZtvItANZdN/G8dM455+S8\nP00RpKf8OHSPajBH/a0BOz/66KOcyyHqiXjTTTcll+l6KMVkt7q2zj777OQyRbl1nJoySNf2d77z\nncjtqYeV8uDefPNNIDg3yhVRNAWCiayjcj5Uxh122CG57J133gGCnlzhQTaz0XHpt1c5WT/60Y9i\nb0ORnD333BOA2bNnA8Hk0ZnoWlMUShPc5kL5hLqn9TuQi1atWgGw7777JpelH48oclfIILyKJJ1x\nxhnJZYpqx6XvDoL7XTleURQRheD8ZIso6doI90AspDeitjdkyBAA/vznPwOpEdxycETJzMzMLEJN\nRpQa4yHjq19dXV3ytZ5oo9qrNT2I/s5HeALMH/7wh0BwnUyfPh0I8jwknEdSSCQpXfrxaKoFjbsC\nwVQ9ffv2jbXN8DWv49FYL1Hb0FMxQK9evWLtR3lWI0eOTC5TJFARkHzou9fEocr9yGWaCe1/8uTJ\nAPTo0SPv8uRC19YJJ5yQXKbjUNRGk+w2FkkSjRU3cOBAIMiPE0XH9H4uZdxxxx2Ty7p37w7Ez6kJ\n30MPPvggAIcccggQ77jSKbKr40iP9mWKLOmeySeSJDoO/Q4US/rx6J7MJzqqVpADDzwQCCKFuUaR\nwsI5SspbUmTp2GOPzbhOuOya3LdSdN5yiVoWU7aKUjPgNmBrYH3gCuA1YBKwBngZGAG4dmJmZmZN\nTraK0nHAx8AJwMbAi8BC4EJgNjAOGARMKWEZrYkJj1arCIgiS+WiJxTlGcybNw+Anj17lrUcij4o\njwWCdng97ffu3bvRbYSf9sN5E8Wip2TlWWy99dZF3wcE+Q8ag0aRrvT8sTBFIh955BEgNWpSTuEI\nliKCiiooL0Z5QC1atMh7P9pGeGLWUt47urZ0nULwVJ8eSfriiy8AOPTQQwGYNm1a7P0oUqZcvsbK\nUkw6R+GIsvKWlHulyZJzkU9ZNT6geqEqStUYlV/fuX4zNt5448h1FC0fPHgwAHfffTcQHVmqJvpe\nZ8yYAUC/fv3Kst9sOUr3AaNDn/0K6EGikgTwGJB/5qmZmZlZFcsWUVL3slYkKk0XAdeH3l8FbJS+\nklljwrknixcvzns7epo699xzgeCpKp+oSnpvleXLlydfH3DAAUAQ/crHbbfdBsCNN96Yslw9S8Kj\nOGvfGom+UnTc48ePB6Bdu3ZZ19E50TxYivSEc7CynR/1klFehPJpwjbZZBMgGPU3nxw2PUmrJ+KI\nESOA4s/dt3DhQgC+/vrrgreleyf8fSrXRONSFUN6JCk8ZlA43yVMx/fUU08BwfUD8e8d3cPhUa91\nftRDtH379kC8nrCSHnlJ/93RuE7hz6ZHndXzq9jUY1LjfOnabozKqLzBxx57DAh6kL7wwgtAEBXL\nRJHNXEbIzofKqp6b6WN4qQdipvs8Sqnm9YsSp9fbVsBTwB3APSRyk6QVsKIE5TIzMzOruGwVpbbA\ndGAUiQRuSOQoqUF3AEEznJmZmVktiuxOma3p7UISTWujCXKVRgK3AM2BV4H7i1BAW0tNnToVCBIZ\n40xyrFCu1pkwYQIQNKWouaCQxOxvvvkm+VqJg4U0wWlAOk11UAs06GYuTW6jRyd+JjTlgQZ+1WCS\nEP/8dOvWDUhtJtF0FUokzqfJ7f77Ez9ZZ555JgD/+c9/ALjwwguB1KalU089Neftp9N3o0Tzf/7z\nnwVvM9wsGx4YsNg0gGezZs0iP5N+fGqC030D8e8dJSFvueWWDd7TPZTPtCOiJr1wU1sUHVe480mx\nhJO9t9hiCyB7k1t4GJD0Jjd952+88QaQ+vuVje4h3ZdqngzL9Xc6XFato+mTNKiqvgN1AqgCS4io\nLGWrKI2s/5Oub4EFMjMzM6t6TW7ASastijjk85SodfSEoieTfKYlaIye1gp5ci/XQKjaT9u2bYGg\nq3p6FCP8lKzu66LB+CZOnJjz/hWdCU8zBKmD1+V6fjSoZbFo+haVVZQovWJFadIuoybwriZ6yn/8\n8ceBxiN26dfaxx9/nPJ+OHm9mFGvpjCosDqgQG4TIMvSpUuBhh0E9N1oUM44A14qWtjYJLUadFcR\n41yk/07XIk9hYmZmZhbBESWzElK7/MUXX1zW/erpXn+3bNky5X1NcQINcwQ0gW54YuAo6cMB6Hij\nPgdBV/M5c+YA5e/qm01TiFgUSrlCUUMBhKVHkjJRTpAGdowaxFEDr+YzQXMtUaQXgmlriqmQPK5M\nlAulwTCVF7q2cETJzMzMLIIjStZkKBKgHBtNS5I+4WY5ffXVVyl/V0p6zlCx6fji9LbRlCThqJZV\nlnKTNFhknHtG6+icNzY5ru5NDdqoQTKzfb6pymWKE30X4cm5n3vuuaKXqTHKhVq9enVZ91stHFEy\nMzMzi+CIUgaqNRdjygErP036mO2ptRyGDx8OwKpVq4BgmoK1TfgJOpeoRZRS5HXkQ0/7dXV1yWVx\nxuhpSvKZALaQiFH673OcPKqmoKlH2eLQd6Cxp8ql8v+TmJmZmVWptaMqHpNqq5qk8K677qpkcSxH\nerJVD41q6E2Vz9N2pejJPE5vt0rZeuutgeKMbp1OE4jmE63y037p6Tu+5pprAPjBD34A5DY5rtU2\n/Z5qHKly/VY5omRmZmYWwRUlMzMzswhuestAkxNqULBSd6224vr3v/8NBN3QNYCiNa53795A9TU5\nh5svZ86c2WBZsWjyznymlDBo3749AO+8805Jtq9zrsFbq7nJTZ030qfJKUQ4gVkdVtbW7vrlTmlw\nRMnMzMwsgiNKIaqlXn755QC8++67ANxxxx0VK5PFp2TPY489FoD58+cDlR1wstxee+21vNdV5FTX\nvSIExfavf/0LCKZOURJ1lHCidLdu3QB44YUXAOjSpUvRyqWpOMJRgE033bRo268FuZ4bCH43//73\nvwPV3RmgXKZOnQrAqFGjCt6Wvt977rknuWzPPfcEyj/w5NoqTkXpO8BEoDPwLXAa8CUwCVgDvAyM\nqH/PzMzMrMmIU1E6mESFqDfQB7iqfvmFwGxgHDAImFKKAlaC2tiL2b5smWnyzY4dO1a4JKXx0Ucf\nAfDee++VbB/hiMvPfvazvLezYMECAE4//XQA/vKXvxRWsJBwGU866SQgiA5li/ipXACff/45AHvv\nvTcAM2bMAGCnnXYquIzjxo0DoEOHDsllyltq6nR+cj03Yc2aNQNgl112AWDRokXFLGJN0fdZC8NG\nKHq4tg2Umos4OUoPA/r17QB8AuxGopIE8BiwX9FLZmZmZlZhcXOUviHR1HYocASwf+i9VUCTaJRO\nH9CsmE/UlpkmsB09enSFS1IaTz/9NBDkLJRCuAfIrFmzgMYnKK00RX9atWrV6Od0P/bs2bPBe8uX\nLwfg0EMPBWDJkiWx96/eQ506dQLgrbfeAoKcrK222ir2tkpN39HOO+8MwIsvvgjAZpttlvxMMfO0\nRDlg22+/PQAtW7bMuo7ymTRFzYABA5LvKV8wio5Hkaz3338/+Z7OTy3ZfPPNgeDcvPHGGynvKxcM\ngpzAYl536sEah+4dRRMz0fkpxbVWC3JJ5h4KtAWeBVqElrcCVhSxTGZmZmbltE3UG3EqSicA7YCr\ngS9IRJeeI5GvNAsYADxZeBltbVSK8TDUI6Qaet8MGjQICJ4oSz0pbjG+T/X+UlShR48eWffXtWtX\nIHosnXC5brrpppR1smkszyOfHJCDDjoIgBtvvBEIcpOOP/54AI4++uict6mcKQh6HhZj/DVFdNTz\nVtfPvvvum/xMMa8pfZ/KU9tnn30A2GGHHWJvQ3mHU6YEaauNRSsgOJ7zzz8fgLFjxybfK+a4Vjoe\nTYUj4evo8ccfL3g/irzoWkuPKN1+++3J1/pui5EPp/ssTmuIcpP+9re/AY3fS3379gXiX2vh+33H\nHXcEgkiuxrmrpt/pekuIqCzFqSjdT6LZbRbQDBgJvE6iJ1xz4NX6z5iZmZk1KXEqSl8AR2VY3re4\nRTErjJ5ifvOb3wDQuXPnShYHaBhxOfzww4Hg6W3hwoVAbjk2paaxWfQ9/ulPf8q6jiIGWnf8+PEp\n74cjLsrfyOahhx7K+hlFbaZNmwbAgQcemHUdnZNDDjkEgIMPPjhleS60jqJkAE888QRQ3F5EyutS\npKBcIxPrew2PqRUnXwlSR5KOm+/59ttvA/D88883eE/3jMZrWrx4MQDbbrtt1u3q+1L0MGrbEOT3\n6W9dH7nQccydOzfr/l566SUgt+Pp378/EESqVq5cmVJWjdzdGEV2hg8fnvWzhVxv55xzTsq/582b\nB8Cvf/1roDp+p7PxyNxmZmZmEZrcyNxt27YFgt5UuVCtua6uDoDp06cDQU2/qTrggAOSr8O9aXLV\nokUix3/IkCEAPPjgg4UVLEd6ygo/yeZKo3rffffdDd5bsSLRZ0FPxwMHDoy9XeUq/fjHP05Zrqe5\ncARG+Rrt2rWLvf10J554IpDfqPJ62lXPnDlz5gCN96TRvbPXXnsBQf6DhJ8qs+W73HvvvQAMHTo0\na1mVT3XyyScDMGHCBCC3c1Ps6IzOsaIK6blKyk/5yU9+kvO2i1VWbUe5J8888wwQ9DbTNXDuuecC\nsGbNmuS6I0aMAIL7PZf9RdG1dsUVVwDwxz/+MfKzmotQUUrlUxWjHBCcF0VldE3lQj01dX83lqOl\n41HZ1ANYvTIlXHZFe9ddNxHrWLp0KQC33HIL0HB+y6+//jr5+s477wRg2bJlQOnHelK5dS1pf+We\nr60QjiiZmZmZRXBFyczMzCxCk2l6a9OmDRB0XzzrrLPy3paaLeSyyy5Lvq6mpNtc9evXD2jYLfvs\ns89Ovi5kKpHWrVsDQahaUxpMnjw55XPhxNBws19cCtmqqW3DDTcEgjB33G7nmbapZM9MTW9qllDT\ng8LZalbLZT8aiPLll19OWQ7BceQzLYe2M2nSJCBoPvj973+f87Y0dYi6LWsg1nDX9HS6d0444YSM\n5WqMmgn1/X755Zexyxp1biC385Ov8PF1794dCJo/1PSmJodhw4YBsHr16uQ6p556asnLmImuNTUn\nhwd6hKDM4a7r+m7VlLLeevn/N6LmSf3GNtbkll4mDa4a9buWi/D9kV6GQpL8VSY1W6sZO0zHoyYx\nueSSS4DMyd3a/lVXXZVxuWiYhfC1lp5cHYcG/QwP21BJ4eMpB0eUzMzMzCLUZERJkQuAn/70p0Aw\n/PuZZ55Z8PZVK9fTsRLmIJhCQFGSUk52Wizpx5OeRFrspDolhKvLtJ44lbSoJ24IknAVWclnqg9N\nYqp1G9uGjlWRB0Wjrr32WiDek4qegvVErSfsww47LHKdZ599FoCZM2cCwRN8pifMRx99FIDdd98d\ngG22iRwwNpKOMxy9y5e68ypaO3jw4OR7vXr1AlK7/4f33xhFkNRNWQmqq1atyrus6ecGGg72V2o3\n3HADEEyzkk4RhPBAip988knpC9aIbJHycMLvBRdcAMBXX30FxOuKHuX1118H4kWS0mnYCpVtt912\ny7scF198cfJ1Kc5FnE4y6ZEl/VsDNuYj0wCR+SRvaxiTYg7+WUscUTIzMzOLUMr+eUXvc6in/yuv\nvDK5bOTIkUD5uhqqNq4ckIsuugiADz74oCz7L4QmENX3l8u0BIq4pHf7huCJ8owzzgCCJ2p9V8p7\nUB7Adtttl1xX3fEXLVoEwCOPPBK7TIU477zzgOCaCuehQW5PXTqe4447rsF72o4GnnvyySezbl/X\n8jHHHAPkNyCbtq/jKmYX4PC91qdPHyDoZp5L2SZOnAgEXZtL1U253N2Q8zmOSneVrlSZS3VdFlKO\nUpyLQo6zWMdlWT0B7EeGepEjSmZmZmYRaiqitMEGGwBBfgkEgwseeeSRANx66605b3f//fdP+TsO\nDRB46aWXAvDhhx/mvN9yS5+6QRM3NkZPJGPGjAGCiFL4KUc5SKeccgoQPU2AmZlZlXJEyczMzCxX\nNRVRknA0Y+ONNwaCsTQeeOCBnLej3kV77LFH1nUUYXn44YeB2shNMjMzs0YVHFHaHHgX6Ax0AuYA\ns4GxmTZqZmZm1hTEqeQ0A/4EbA8MAq4DridRURoHTAOmZFjP6fZmZmZWCwqKKF1HokK0tP7fPUhU\nkgAeq9+wmZmZWZOTraI0FPgYmF7/73VIrW2tAjYqfrHMzMzMKi/bFCbDSDSh7QfsAtwOtAm93wpY\nUZqimZmZmVVWtohSH6Av0A9YBJwIPF6/HGAAQTOcmZmZWS2KnFQz10lxvwXOBSYCzYFXgfvzL5eZ\nmZlZxS0horKUS0WpX+h130JKY2ZmZlYLPDK3mZmZWQRXlMzMzMwiuKJkZmZmFsEVJTMzM7MIriiZ\nmZmZRXBFyczMzCyCK0pmZmZmEVxRMjMzM4vgipKZmZlZBFeUzMzMzCK4omRmZmYWwRUlMzMzswi5\nTIqbj6X1f6w2fB+fr1rhc1VbfL5qi89X7SjWufoHsF+mN9YpwsajzAT6lHD7ZmZmZsUyC+hb6UKY\nmZmZmZmZmZmZmZmZWWzrAuOBp4EZwLaVLY5FeIHE+ZkB/AHoBMwBZgNjKW3+msVXR+IcQfQ5OhVY\nADwDDCx3AS0pfK52Bd4juMeOqF/uc1UdmgH/R+Jemg8cgu+vapXpXO0KvE8N319DgNvqX9cBUypY\nFsusBYmKUtgjwL71r8cBh5a1RJbJKOAlEg8dkPkcbVH/mWZA6/rXzctbTKPhuToFOCftMz5X1WMo\ncGP9642Bd4CH8f1VjYbS8FydTBnvr1KMo9QLeLz+9Xxg9xLswwqzM7AhMA14EugJ9CBRYwd4jIhu\nklZWb5F48NCTbaZztAcwF/gK+LR+nZ3KW0yj4bnajcQT7Szg90BLYE98rqrFfcDo+tfrkjgnvr+q\nU6ZzVdb7qxQVpdYkCinflGg/lr/PgOuAA4HTgLvS3l8FbFTuQlkDDwJfh/4dbg5dSeIctQb+m2G5\nlVf6uZoPnEdiiJQlwCVAK3yuqsVnJH7nWpH4j/giUv+f8v1VPdLP1a+AZynj/VWKCsynJAoc3sea\nEuzH8vcmQeXoH8B/gLah91sBK8pdKMsqfB+1JnGO0u+3VsAn5SyUZfQQsDD0eld8rqrNVsBTwB3A\nPfj+qmbhc3UvTeD+GgL8sf51T+AvFSyLZfYzYEz96y2B10icJw0QOp4gOc4qqwOJxERI5Ciln6O2\nJNri1yfx9PQazqGolA4E5+oZEs02AGcAv8Hnqpq0JfH99wst8/1VnTKdq5q/v9YhkQg3t/5P58oW\nxzJYj6AXwWwSFdrtSIym/jSJNl/3eqsOHQgShKPO0SkkQtHPAYPLWzwL6UBwrnYm0YNqBnA3iRwK\n8LmqFjcDHxD0mppBIp9lJr6/qk2mc1WH7y8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMz\nMzMzMzMzMzMzy9f/A2YEpua7VtHyAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f20ed44be90>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "index = 22\n",
    "xs = array(h5[\"images\"][index].reshape(-1,48,1),'f')\n",
    "transcript = h5[\"transcripts\"][index]\n",
    "imshow(xs.reshape(-1,48).T,cmap=cm.gray)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Forward propagation is quite simple: we take the input data and put it into the input sequence of the network, call the `forward` method, and take the result out of the output sequence.\n",
    "\n",
    "Note that all sequences (including `xs`) in clstm are of rank 3, with indexes giving the time step, the feature dimension, and the batch index, in order.\n",
    "\n",
    "The output from the network is a vector of posterior probabilities at each time step."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x7f20ed178510>"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f20ec8da850>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "net.inputs.aset(xs)\n",
    "net.forward()\n",
    "pred = net.outputs.array()\n",
    "imshow(pred.reshape(-1,noutput).T, interpolation='none')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Target arrays are similar to the output array but may have a different number of timesteps. They are aligned with the output using CTC."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def mktarget(transcript,noutput):\n",
    "    N = len(transcript)\n",
    "    target = zeros((2*N+1,noutput),'f')\n",
    "    assert 0 not in transcript\n",
    "    target[0,0] = 1\n",
    "    for i,c in enumerate(transcript):\n",
    "        target[2*i+1,c] = 1\n",
    "        target[2*i+2,0] = 1\n",
    "    return target"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x7f20ec8a9790>"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f20ed273450>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "target = mktarget(transcript,noutput)\n",
    "imshow(target.T)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The CTC alignment now combines the network output with the ground truth."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x7f20ec7e8790>"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkoAAADcCAYAAACPg47uAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAFMxJREFUeJzt3XuMHdV9wPHvLrtrY1g7TaGkREmQIbTqHyU8WmgbeU3l\nPKyA3CK1/1RtQE2UpCiKVCoqXErdqkorIZBSiUflPAhRmkqxEpI0chKZGFwghbihapGJgFq0SYlU\nSHHIGvzYR/+YGe7s2fndmXv3Pu3vR1qdmTlnZs7duXPv756ZOQckSZIkSZIkSZIkSZIkSZIkSZIk\nSZIkSdIpahK4F3gM2A9cONzqSJIkjY7rgE/n01cCDwyxLpIkSSPlDuB3S/M/HFZFJEmS+mWqy/U2\nAq+U5hfJLsctFQuuuOKKVw4ePDi7hrpJkiQNysPA1nRht4HSK0A5CFoRJAEcPHhwdm5ujq1bLwFg\n69a35tPP5yVeyJIX/7e10pEj+dbzGOzVo3n6WpaeOJ6lC4utdYplx46tzFtaStLSOsWyhYV8frl6\nnSrl7ZRNnpGnkxV5Fct6rV2d0/1PTlQW27X3NXa9a6Z6u01eQ1SHpeSYlLdV/N/Sur6eVtR1VZmk\nbo2OY1FmeeV+im1NlU6Noo7p60jrk267W+n7MrW0xK5vHmfX9jMr81bUaWa6uo5V65w4uXL/kU7e\nz528L6N1yuWK870os/7MlfPFcSu/b+reJ+3qVXcsq/Ir3p+7/mmeXdecHa+TLkvfn+3e09HrayJ9\n3xdpk3MoOg9PnMjTk62yCyfb1zHdX/n8m1mXp9Pt69Fuu6/XI3lvF//f8vKFk+zat8Cu30y2O9Xg\n6zL9rHh93TbnYfB53MqvWKf4nkvPh0L6PytvYyr4P7bbX/o9mn5ut5OuE73Xquowlawzk38/Fa9v\nwwZ2fe4H7PrIL7bW3bgxS9/4xiw959wsXffmvMDb8vRCHnroCR566AngHF566aXDd91191zVS6g5\nQqHrgGuBG4CrgD8H3peUWQaYmKjexeTraevLYCpJi6/s9UEKsCFIizLFV8lZpXWKvOLtsi7Zb/oW\nKH9dFfWemFyZLjf5Tk62t5jMLyRpeZ3iI2exZr5JmWL+RLKP55fh/InqukRpef2Fmvk0rctrtzxa\n1m55XV4v1+m35WUITi2NII/XePF4jY/mx6q20L7l5eVtVQW7bVH6MvAu4NF8/oYutyNJkjSyug2U\nloGP9LIiGr43DLsCkiSNmG4DpcaWl6vvs1hMUlh5+WiY0na35aq8qhdQI7jjZLSMRSUFWZOzxofH\na7x4vMZHs2PV/QEdwF3GkiRJ46nvLUrjqF3c6Y8MSZJOH7YoSZIkBQyUJEmSAgZKkiRJAQMlSZKk\ngIGSJElSwEBJkiQpYKAkSZIUMFCSJEkKGChJkiQFDJQkSZICBkqSJEmBpoHSlcD+fPoi4BHgAHA3\nMNGHekmSJA1dk0DpZmA3sC6fvxPYCWwhC5J29KdqkiRJw9UkUHoOuI5Wy9FlZK1JAHuBbX2olyRJ\n0tA1CZS+BCyU5suX2uaBTT2tkSRJ0ojo5mbupdL0LHCkR3WRJEkahs1RRjeB0pPAXD69ndZlOEmS\npHF0OMqY6mAjy3l6E9nN3TPAIWBP9/WSJEkaXf18tH+5vogkSdLQ7SN7OG1VXGSHk5IkSQEDJUmS\npICBkiRJUsBASZIkKWCgJEmSFDBQkiRJCnTSj1LH3gpcmE8X6Vvz0Oy8N2XpOee0yp99dpaeuSFL\np/PaTebrLOV9gp8sDaiymE8v5Olrx7L0eJ6++mqWHjvWWqeYLtLjJ1Zu93he7mSxj9JrKjZzIplP\n0+O0FNsp1lkI5tO0PL0UzKfLq/KaLq/SLm8tZSVJGge2KEmSJAUG3uFkP3e4VvaQKUnSackOJyVJ\nkjrV13uUqthqI0mSxoUtSpIkSQEDJUmSpEDdpbdp4NPA24B1wF8DTwP3kT0N/hRwI15RkyRJp6C6\nFqXfA14EtgDvBe4C7gB25ssmgB39rKAkSdKw1AVKXwRuK5U9CVwGHMiX7SV7nE6SJOmUUxcoHQXm\ngVmyoOnWZJ15YFN/qiZJkjRcTW7mfgvwbeB+4AusHKliFjjSh3pJkiQNyuYooy5QOg/4FnAz2Q3c\nAE8Cc/n0dlqX4SRJksbR4Sij7qm3nWSX1m6jda/Sx4C/A2aAQ8CeHlRQkiRp5Ax8rDdJkqQR41hv\nkiRJnTJQkiRJChgoSZIkBQyUJEmSAgZKkiRJAQMlSZKkgIGSJElSwEBJkiQpYKAkSZIUMFCSJEkK\nGChJkiQFDJQkSZICBkqSJEkBAyVJkqTAVIMyZwC7gYuBZeDDwHHgPmAJeAq4Mc+TJEk6ZTRpUbqG\nLCB6J3Ar8HHgDmAnsAWYAHb0q4KSJEnD0iRQ+grwoXz6AuBl4HLgQL5sL7Ct5zWTJEkasqb3KC2S\nXWr7BPB5slakwjywqbfVkiRJGr4m9ygVrgfOA54A1peWzwJHelgnSZKkQdocZTRpUfp94JZ8+jWy\n1qWDwFy+bDuty3CSJEnj5nCU0aRFaQ/ZZbeHgWngY8D3yZ6EmwEO5WUkSZJOKRP1RbpmdwGSJGkc\n7CN7MG1VXGSHk5IkSQEDJUmSpICBkiRJUsBASZIkKWCgJEmSFDBQkiRJChgoSZIkBQyUJEmSAgZK\nkiRJAQMlSZKkgIGSJElSwEBJkiQpYKAkSZIUaBoo/RzwA+Bi4CLgEeAAcDcVI+1KkiSdCqYalJkG\n/h44ShYU3QnsJAuU7gF2AA/0q4JNpRHfZJCWp6eC+TSdKa07U1MmXQ5wRp6uC8oUkeZ0Ur48nZYt\nlle9vrVErst5upSki0l+WVq2sJikRf5Cm3UXkjTdRjkvWiddXq5XlBelTcqkr7tq3abz3ZRtt42m\n25YkVWvSonQ7WUD0o3z+MrIgCWAvsK0P9ZIkSRq6uhal64EXgW8Bt5A1VpQbLOaBTX2pWYc6+aUu\nSZLURF2gdAPZ1ZZtwDuAzwLnlvJngSP9qZokSdJAbI4y6i69zQFbgauBfwP+APhGvhxgO63LcJIk\nSePocJTR5GbusmXgJmA32f3Lh4A93ddLkiRpdHUSKF1dmt7a43pIkiSNHDuclCRJChgoSZIkBQyU\nJEmSAgZKkiRJAQMlSZKkgIGSJElSwEBJkiQpYKAkSZIUMFCSJEkKGChJkiQFDJQkSZICBkqSJEkB\nAyVJkqSAgZIkSVJgqmG57wE/yacPA38D3AcsAU8BNwLLva6cJEnSMDUJlNbn6dWlZV8FdgIHgHuA\nHcADva2aJEnScDW59HYJsAH4JvAgcBVwGVmQBLAX2NaX2kmSJA1Rkxalo8DtwKeAtwPfSPLngU09\nrpckSdLQNQmUngGey6efBX4MXFrKnwWO9LhekiRJg7I5ymhy6e0G4I58+nyywOhbwFy+bDuty3CS\nJEnj5nCU0aRF6VPAZ2gFQzeQtSrtBmaAQ8CeNVZQkiRp5Ez0cdt2FyBJksbBPrIH01bFRXY4KUmS\nFDBQkiRJChgoSZIkBQyUJEmSAgZKkiRJAQMlSZKkgIGSJElSwEBJkiQpYKAkSZIUMFCSJEkKGChJ\nkiQFDJQkSZICBkqSJEmBJoHSLcBjwHeB9wMXAY8AB4C7qRhpV5Ik6VRQFyhtBX4N+PV8ejNwB7AT\n2EIWJO3oX/UkSZKGpy5QejfwH8ADwNeArwKXk7UmAewFtvWtdpIkSUM0VZN/LvAW4Bqy1qSvsfJS\n2zywqT9VkyRJGq66QOkl4GlgAXgGOAa8uZQ/CxzpT9UkSZKGq+7S2yPAe/Pp84ENwIPAXL5sO63L\ncJIkSeNoc5RR16L0dbKbtp8gC6r+CHge2A3MAIeAPT2poqSBWUu/IE3WbVcmymuyPC0TzVetU1e2\nybpRWv4gjcrMJGXL+0mXFWlxn8MZbepYlJlmpfT1LrFasWyhTZmqbVVto0iryta9Z9L9nixNL+dp\nUcfFZHm6/6pl0euset3psqhs1f6i/+NCMt+urlVlquajZZ3ka4XDBMFSXaAE8KcVy7aupTaSJEnj\noEmgJJ0yumlJWUsLSNOy7dZp0vLRdJ1CVQtI1KoR5bfbfrs6nhHMR+uUnx6ZTsosJPPp/suiX9ft\nWkLqtpG2bpTLLCVlUuV1TgTbj1pGmrRmRC0iTbbbZH/RtqrKddNa0k3ZpmVsaVEn7JlbkiQpYIuS\nTivd/JL016cknb5sUZIkSQoYKEmSJAUMlCRJkgIGSpIkSQEDJUmSpICBkiRJUsBASZIkKWCgJEmS\nFLDDSUnqo2ENQNzJwMSdDEHTy4GCp5K03bpp2SItBhsuD42zLikznZSZTtL1pXWLMutYqd1QN8Uw\nO8sVeQDHk/yq4V3SoW7SsidKeVEnuMeSssV+y9s+kaQLSVo1nE5aJk3TYXI6GS4nHTA43XfV/KDZ\noiRJkhSwRUmS+mgtv4aH/UtaUrMWpfcD+/O/fwFeAy4HHgEOAHezcoBvSZKkU0KTQOmzwNX530Hg\no8BtwE5gC1mQtKNfFZQkSRqWTu5RugL4JeCTZC1KB/Lle4FtPa6XJEnS0HUSKO0E/jKfLl9qmwc2\n9axGkiRJI6JpoPQG4GLg4Xy+fI/hLHCkl5WSJEkaoM1RRtNAaQvwYGn+SWAun95O6zKcJEnSuDkc\nZTTtHuBi4D9L8zcBu8n6+joE7Om6apIkSSOqn4/1R52UjrxuerRt15Nt2uts1DttVa+0UV7Uo227\ndep6xYXVvdwWPdcW60wk+VXbTft+Sddt8sZIe28t9yyb9lgb9Wyblm+3TrrNk232l24r7Z22qkfb\nqDfaqnXqerKN0qq6RWXarRNto0qU1806vSovdaqTm3W76S29br68LCrbrqfzpt8TVctmgnSalqLn\n8rOS+ShdV9rh+nzhujw9M5nftHFlufL0zMzqPIDJ/IUuLKxMAV59NUt/Op+lL/9flr7wQpb+V959\n+fOl7T2TJfsOZw+mrYqL7JlbkiQpYM/cFXr5a1jdReOdtOpFy7v51dbJunUp1Lfu9aJFsPzzp9zS\n11S63bTVsMn/ppN16lr1onLlsul8u23VtaZ1Mk5V2hJYtc1RbQnsdctgP631/O/0XF3L+Veermul\nqRpHLh2PLh2XLh23rlxmfTI/3eAb/Yz8BUwmaWFpaWVatpgvO5mfCEXLe3HeHc3TI6WTaGF+ZVqM\nR3csWedYa5XXx5tLy6Zj2aXzUD8eXTeXumxRkiRJChgoSZIkBbz0pr7rpvneS5yS1JmJhfoyvTC2\nT2p1yRYlSZKkgC1KkiSdAk63lp5BsUVJkiQpYIvSaaibDtPaLW/6qH27Tjk7eXy3adkmj9538rhw\nOl88Ej+d5JfXTXsuSx/fr9pfVaeeZVHHmhB3jrkWxSPAVb9Wi1siFpM03X/VI/fpfPRYe7vH9aOy\n3TyuX1W/pl0LdPLYfpVOH8/3vj9pcGxRkiRJCtiidBpq8svSX5+SJNmiJEmSFLJFaQSspbv+bobp\naHL/T9OBfNut02QA32j76X065f1F9/1UDelRzm+3n0LVfTh194mk9wy1e/IkuqelatDfaJ1oIN+q\n7VYNy5GWi/KaDN/R5L6iujrW/X/Xev9PVKaXvxLXcu9eu7yq8y0tXzfERpNzNi07kyyvGiZnMplP\nB9KuGqaj7n9e5Fe9X+qGj2lyH1y6/Wj4nKptpMvL52w0lE6RpufDQsV0NJRO1euOBtXu5pztZGid\npvOnGluUJEmSAnUtSpPAJ4GLyYLGD5IFyffl808BN2L3DWviILynn05+oTT9Fd5JmU6ePOxmnSat\nloWmLSLQauloUrdO61j1tGHaotLJQMGFdr/UI3Xbr2ohqBtcuKqOdXWqapGMWjOi5VXb6aRVo5tB\nhgfxtOJaPrf9XB8vdZ+x7wbOAt4J/BXwceAOYCewhezzY0c/KyhJkjQsdYHSa8AmsoBoE3ACuBw4\nkOfvBbb1rXaSJElDVHfp7VFgPfB94GeBa8lakgrzZAGUpA500vRuM70kDU9di9LNZMHSLwDvAO5n\nZUfEs8CR/lRNkiRpIDZHGXWB0lnAK/n0y2QtUE8Cc/my7bQuw0mSJI2jw1FG3aW324HPAP9M1pJ0\nC/CvwG6yB1AOAXt6U0dJkqTRkva310t2GSBJksbBPrKH01bFRXY4KUmSFDBQkiRJChgoSZIkBQyU\nJEmSAgZKkiRJAQMlSZKkgIGSJElSwEBJkiQpYKAkSZIUMFCSJEkKGChJkiQF6gbFXasf5X8aDz+P\nx2tceKzGi8drvHi8xkevjtWzZGO9rdLPQXEfAub6uH1JkqReeRjYOuxKSJIkSZIkSZIkSWpsErgX\neAzYD1w43Ooo8D2y47Mf+BRwEfAIcAC4m/7ev6bmriQ7RhAfow8C3wW+A7xv0BXU68rH6lLgh7TO\nsd/Jl3usRsM08Dmyc+lx4Fo8v0ZV1bG6FPgfxvj8ug74dD59JfDAEOuiauvJAqWyrwJb8ul7gN8a\naI1U5Wbg38l+dED1MXpTXmYa2JhPzwy2mmL1sfoA8MdJGY/V6LgeuDOf/hngv4Gv4Pk1iq5n9bH6\nQwZ4fvWjH6XfAL6RTz8OXNGHfWhtLgE2AN8EHgSuAi4ji9gB9hI8JqmBeo7sh0fxy7bqGP0K8Chw\nEnglX+eXB1tNsfpYXU72i/Zh4JPA2cCv4rEaFV8EbsunJ8mOiefXaKo6VgM9v/oRKG0kq2RhsU/7\nUfeOArcD7wE+DHw+yZ8HNg26UlrlS8BCab58OfSnZMdoI/CTiuUarPRYPQ78CVkXKYeBvwBm8ViN\niqNkn3OzZF/Et7Lye8rza3Skx+rPgCcY4PnVjwDmFbIKl/ex1If9qHvP0AqOngV+DJxXyp8Fjgy6\nUqpVPo82kh2j9HybBV4eZKVU6cvAk6XpS/FYjZq3AN8G7ge+gOfXKCsfq3/kFDi/rgM+k09fBXx9\niHVRtQ8Bd+XT5wNPkx2nooPQe2ndHKfhuoDsxkTI7lFKj9F5ZNfi15H9enoa76EYlgtoHavvkF22\nAfgo8Ld4rEbJeWT//6tLyzy/RlPVsRr782uC7Ea4R/O/i4dbHVWYovUUwQGygPbtZL2pP0Z2zden\n3kbDBbRuEI6O0QfImqIPAr892Oqp5AJax+oSsieo9gP/QHYPBXisRsUngBdoPTW1n+x+lofw/Bo1\nVcfqSjy/JEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmS1K3/Bw/z8MhrtDknAAAAAElFTkSu\nQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f20ec841d50>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "seq = clstm.Sequence()\n",
    "seq.aset(target.reshape(-1,noutput,1))\n",
    "aligned = clstm.Sequence()\n",
    "clstm.seq_ctc_align(aligned,net.outputs,seq)\n",
    "aligned = aligned.array()\n",
    "imshow(aligned.reshape(-1,noutput).T, interpolation='none')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Next, we take the aligned output, subtract the actual output, set that as the output deltas, and the propagate the error backwards and update."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "deltas = aligned - net.outputs.array()\n",
    "net.d_outputs.aset(deltas)\n",
    "net.backward()\n",
    "net.update()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "If we repeat these steps over and over again, we eventually end up with a trained network."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "for i in range(10000):\n",
    "    index = int(rand()*len(h5[\"images\"]))\n",
    "    xs = array(h5[\"images\"][index].reshape(-1,ninput,1),'f')\n",
    "    transcript = h5[\"transcripts\"][index]\n",
    "    net.inputs.aset(xs)\n",
    "    net.forward()\n",
    "    pred = net.outputs.array()\n",
    "    target = mktarget(transcript,noutput)\n",
    "    seq = clstm.Sequence()\n",
    "    seq.aset(target.reshape(-1,noutput,1))\n",
    "    aligned = clstm.Sequence()\n",
    "    clstm.seq_ctc_align(aligned,net.outputs,seq)\n",
    "    aligned = aligned.array()\n",
    "    deltas = aligned - net.outputs.array()\n",
    "    net.d_outputs.aset(deltas)\n",
    "    net.backward()\n",
    "    net.update()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x7f20ec6c1390>"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nSUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f20ec866790>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "figsize(15,3)\n",
    "imshow(xs.reshape(-1,ninput).T)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def log10max(a,eps=1e-3):\n",
    "    return log10(maximum(a,eps))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x7f20ec690190>"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n+380/5NacTyWF7XGsqJ2WF7UzOPAqrIVlR4edBNwRg/3L0mS1C33ASsHnQlJkiRJkiRJkiRJbZkA\nPg88ANwLvG6w2dGQ+luy8nEv8EXgCOAbwGbgs/T2HjqNhlPIygeky8dFwLeAB4F39juDGhqxrLwB\n2EFxfTkvX25Z0dA4B7gxT58CfG2AedFw2o+sohR9HTg9T38O+K2+5kjD5qNkPZUeyJ+XlY/X5tvs\nAyzN04v7m00Ngdll5ULg0lnbWFbUkV6No/RW4M48/RDwxh4dR6PrBOBlwN8A9wCnAieRtRYAbCTR\nVVMLxlNk/+mqtRyVlY83AfcDvwB25a85vr/Z1BCYXVZOJmsxug+4AdgfeDOWFXWgVxWlpWQFsWa6\nh8fSaHoRuBb418AHgS/PWr8bWNbvTGmo3AHsCc9jKPYFsvKxFHi+ZLkWltll5SHgcrIharYDVwFL\nsKyoA72qvOwiK5TxODM9OpZG03coKkffBX4MvCasXwI81+9MaajFa8hSsvIx+1qzBHi2n5nSUPoq\n8O2QfgOWFXWoVxWl+4Ffy9On4oiomusCYF2ePpDsonUXxSClqynCLBJkP3yzy8fDwL8E9iVrHTga\n2DqQ3GmY3EkWloUsRPsIlhUNmQrZzZb3539HDjY7GkKLgP9C9mO3maxC/XqyEd0fILuvwF5vOpzi\nBt1U+biQ7EfwEeBd/c2ehsjhFGXlBLIekvcCf0V2jxJYViRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ\nkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ\nkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ\nkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ\nkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ\nkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ\nkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJUj9NAJ8HHgDuBV432OxIkiQNj3OA\n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\nAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f20ec85ca50>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "figsize(10,10)\n",
    "subplot(211); imshow(xs.reshape(-1,ninput)[:200].T)\n",
    "subplot(212); imshow(pred.reshape(-1,noutput)[:200].T)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's write a simple decoder."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ 0  0  0  0  0  0  0  0  0  0 78 78  0  0  0  0  0  0  0  0  0 78 79 79  0\n",
      "  0  0  0  0  0  0  0  0  0  0  0  0  0  0 76 67 67  0  0  0  0  0  0  0  0\n",
      "  0  0  0 63 63 63  0  0  0  0  0  0  0  0  0  0  0  0 63 63  0  0 63  0  0\n",
      "  0  0  0 67  0 67  0  0  0  0  0  0  0  1  1  1  1  1  0  0  0  0  0  0  0]\n"
     ]
    }
   ],
   "source": [
    "classes = argmax(pred,axis=1)[:,0]\n",
    "print classes[:100]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "When we turn this back into a string using a really simple decoder, it doesn't come out too well, but we haven't trained that long anyway. In addition, this decoder is actually very simple"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "ttreeeii in a 1l inage plane is iei enpleited. Also,\n"
     ]
    }
   ],
   "source": [
    "codes = classes[(classes!=0) & (roll(classes,1)==0)]\n",
    "chars = [chr(h5[\"codec\"][c]) for c in codes]\n",
    "print \"\".join(chars)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's wrap this up as a function:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'ttreeeii in a 1l inage plane is iei enpleited. Also,'"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def decode1(pred):\n",
    "    classes = argmax(pred,axis=1)[:,0]\n",
    "    codes = classes[(classes!=0) & (roll(classes,1)==0)]\n",
    "    chars = [chr(h5[\"codec\"][c]) for c in codes]\n",
    "    return \"\".join(chars)\n",
    "decode1(pred)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Here is another idea for decoding: look for minima in the posterior of the epsilon class and then return characters at those locations:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'ui\\x00 in a \\x00 iiage plane is feueipleied. lse,'"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from scipy.ndimage import filters\n",
    "def decode2(pred,threshold=.5):\n",
    "    eps = filters.gaussian_filter(pred[:,0,0],2,mode='nearest')\n",
    "    loc = (roll(eps,-1)>eps) & (roll(eps,1)>eps) & (eps<threshold)\n",
    "    classes = argmax(pred,axis=1)[:,0]\n",
    "    codes = classes[loc]\n",
    "    chars = [chr(h5[\"codec\"][c]) for c in codes]\n",
    "    return \"\".join(chars)    \n",
    "decode2(pred)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "It's often useful to look at this in the log domain. We see that the classifier still has considerable uncertainty."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x7f20bd5569d0>"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f20ed438a90>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "imshow(log10max(pred.reshape(-1,noutput)[:200].T))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The aligned output looks much cleaner."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x7f20bd48fe10>"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f20ec85c890>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "imshow(aligned.reshape(-1,noutput)[:200].T)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x7f20bd3c7a10>"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n/zfZNQZC3HDVAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f20ec775810>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "imshow(log10max(aligned.reshape(-1,noutput)[:200].T))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can also decode the aligned outut directly."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "turedd in a 2D image plane is not exploited. Also,\n",
      "tured in a 2D image plane is not exploited. Also,\n"
     ]
    }
   ],
   "source": [
    "print decode1(aligned)\n",
    "print decode2(aligned,0.9)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "There is a better decoder in the CLSTM library."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
